package com.demo.java.OD101_150.OD126;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【获得完美走位】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145722867
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner scan = new Scanner(System.in);
            String s = scan.nextLine();  // 读取输入的字符串
            // 验证输入字符串是否合法
            if (null == s || s.length() < 1 || s.length() > 10 * 10 * 10 * 10 * 10) {
                System.out.println("0");
                return;
            }
            // s.length` 是 4 的倍数
            if (s.length() % 4 != 0) {
                System.out.println("0");
                return;
            }
            char[] chars = s.toCharArray();
            int length = chars.length;
            int number = length / 4;  // 计算每个字符应该出现的次数

            // 初始化字符计数
            Map<Character, Integer> myHashMap = new HashMap<>();
            for (char ch : chars) {
                // 验证字符是否为合法字符
                if (ch != 'A' && ch != 'S' && ch != 'D' && ch != 'W') {
                    System.out.println("0");
                    return;
                }
                myHashMap.put(ch, myHashMap.getOrDefault(ch, 0) + 1);
            }

            // 更新哈希表中的字符计数，减去每个字符需要的数量
            myHashMap.replaceAll((k, v) -> v - number);

            int resultValue = Integer.MAX_VALUE;  // 初始化最小子串长度为最大值

            // 滑动窗口遍历所有可能的子串
            for (int i = 0; i < length; ++i) {
                char charOne = chars[i];
                int result = 0;
                Map<Character, Integer> hashMap = new HashMap<>(myHashMap);
                if (hashMap.get(charOne) > 0) {
                    // 从当前字符开始，向右滑动窗口
                    for (int j = i; j < length; j++) {
                        char c2 = s.charAt(j);
                        hashMap.put(c2, hashMap.get(c2) - 1);
                        result++;
                        boolean isFlag = true;
                        // 判断当前窗口内的字符是否满足要求
                        for (Integer val : hashMap.values()) {
                            if (0 < val) {
                                isFlag = false;
                            }
                        }
                        if (isFlag) {
                            break;
                        }
                    }
                }
                boolean isFlag = true;
                // 判断当前窗口内的字符是否满足要求
                for (Integer val : hashMap.values()) {
                    if (0 < val) {
                        isFlag = false;
                    }
                }
                if (isFlag) {
                    resultValue = Math.min(resultValue, result);  // 更新最短子串长度
                }
            }
            System.out.println(resultValue);  // 输出最短子串长度
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("0");
        }
    }
}